package hamming;

import external.library.MatrixMultiplication;
import utilities.FileUtility;
import utilities.MatrixUtility;

/**
 * Encode le fichier de depart avec Hamming
 * 
 * @author Dapy, Dubie
 */
public class Encodeur 
{
	/** Matrice generatrice */
	int[][] matriceGen =   {{1,0,0,0},
							{0,1,0,0},
							{0,0,1,0},
							{0,0,0,1},
							{1,0,1,1},
							{1,1,1,0},
							{0,1,1,1}};
	
	/**
	 * Encode le fichier avec Hamming
	 */
	public void encode()
	{
		// On lit le contenu du fichier en entree
		String text = FileUtility.readFile("source_win.txt");
		StringBuilder textCode = new StringBuilder();
		String[] lignes = text.split(System.getProperty("line.separator")); 
		MatrixMultiplication matrixMultiplication = new MatrixMultiplication();
		
		// Pour chaque ligne, 
		for(String ligne : lignes)
		{
			String[] messages = new String[11];
			int indexDeb = 0;
			int indexFin = 4;
			int ind = 0;
			// On decoupe en paquet de 4 bits
			while(indexFin <= ligne.length())
			{
				messages[ind++] = ligne.substring(indexDeb, indexFin);
				indexDeb += 4;
				indexFin += 4;
			}
			// On transforme le paquet en matrice et on le multiplie avec la matrice generatrice
			for(String message : messages)
			{
				int[][] messageAsMatrix = MatrixUtility.stringToMatrice(message);
				int[][] multiplicationResult = matrixMultiplication.calculMatrice(matriceGen, messageAsMatrix);
				String multiplicationResultAsMatric = MatrixUtility.matriceToString(multiplicationResult);
				textCode.append(multiplicationResultAsMatric);
			}
			textCode.append(System.getProperty("line.separator"));
		}
		// On ecrit le fichier 'emis'
		FileUtility.writeFile(textCode.toString(),"emis.txt");
	}
}
